﻿#if NET6_0_OR_GREATER
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;

using zijian666.Abstractions;
using zijian666.Convertor.Base;
using zijian666.Core;

namespace zijian666.Json.standard20;
public class JsonNodeConvertor : AllowNullConvertor<JsonNode>
                                , IFrom<JsonDocument, JsonNode>
                                , IFrom<JsonElement, JsonNode>
                                , IFrom<string, JsonNode>
                                , IFrom<object, JsonNode>
{
    private static readonly JsonNodeOptions OPTIONS = new JsonNodeOptions
    {
        PropertyNameCaseInsensitive = true,
    };
    public ConvertResult<JsonNode> From(IConvertContext context, JsonDocument input)
    {
        return JsonNode.Parse(input.RootElement.GetRawText(), OPTIONS)!;
    }
    public ConvertResult<JsonNode> From(IConvertContext context, JsonElement input)
    {
        return JsonNode.Parse(input.GetRawText(), OPTIONS)!;
    }
    public ConvertResult<JsonNode> From(IConvertContext context, string input)
    {
        return JsonNode.Parse(input, OPTIONS)!;
    }
    public ConvertResult<JsonNode> From(IConvertContext context, object input)
    {
        return JsonSerializer.SerializeToNode(input);
    }
}

#endif